package org.batfish.representation.cisco_nxos;

import javax.annotation.Nonnull;
import org.batfish.vendor.StructureUsage;

public enum CiscoNxosStructureUsage implements StructureUsage {
  AAA_GROUP_SERVER_RADIUS_SOURCE_INTERFACE("aaa group server radius source-interface"),
  AAA_GROUP_SERVER_RADIUS_USE_VRF("aaa group server radius use-vrf"),
  AAA_GROUP_SERVER_TACACSP_SOURCE_INTERFACE("aaa group server tacacs+ source-interface"),
  AAA_GROUP_SERVER_TACACSP_USE_VRF("aaa group server tacacs+ use-vrf"),
  BGP_ADDITIONAL_PATHS_ROUTE_MAP("bgp address-family additional-paths route-map"),
  BGP_ADVERTISE_MAP("bgp address-family advertise-map"),
  BGP_ATTRIBUTE_MAP("bgp address-family attribute-map"),
  BGP_DAMPENING_ROUTE_MAP("bgp address-family dampening route-map"),
  BGP_DEFAULT_ORIGINATE_ROUTE_MAP("bgp address-family default-originate route-map"),
  BGP_EXIST_MAP("bgp address-family exist-map"),
  BGP_INJECT_MAP("bgp address-family inject-map"),
  BGP_L2VPN_EVPN_RETAIN_ROUTE_TARGET_ROUTE_MAP(
      "bgp address-family l2vpn evpn retain-target route-map"),
  BGP_NEIGHBOR_ADVERTISE_MAP("bgp neighbor advertise-map"),
  BGP_NEIGHBOR_EXIST_MAP("bgp neighbor exist-map"),
  BGP_NEIGHBOR_FILTER_LIST_IN("bgp neighbor address-family filter-list in"),
  BGP_NEIGHBOR_FILTER_LIST_OUT("bgp neighbor address-family filter-list out"),
  BGP_NEIGHBOR6_FILTER_LIST_IN("bgp neighbor address-family [IPv6] filter-list in"),
  BGP_NEIGHBOR6_FILTER_LIST_OUT("bgp neighbor address-family [IPv6] filter-list out"),
  BGP_NEIGHBOR_INHERIT_PEER("bgp neighbor inherit peer"),
  BGP_NEIGHBOR_INHERIT_PEER_POLICY("bgp neighbor address-family inherit peer"),
  BGP_NEIGHBOR_INHERIT_PEER_SESSION("bgp neighbor inherit peer-session"),
  BGP_NEIGHBOR_PREFIX_LIST_IN("bgp neighbor address-family prefix-list in"),
  BGP_NEIGHBOR_PREFIX_LIST_OUT("bgp neighbor address-family prefix-list out"),
  BGP_NEIGHBOR6_PREFIX_LIST_IN("bgp neighbor address-family [IPv6] prefix-list in"),
  BGP_NEIGHBOR6_PREFIX_LIST_OUT("bgp neighbor address-family [IPv6] prefix-list out"),
  BGP_NEIGHBOR_NON_EXIST_MAP("bgp neighbor non-exist-map"),
  BGP_NEIGHBOR_REMOTE_AS_ROUTE_MAP("bgp neighbor remote-as route-map"),
  BGP_NEIGHBOR_ROUTE_MAP_IN("bgp neighbor address-family route-map in"),
  BGP_NEIGHBOR_ROUTE_MAP_OUT("bgp neighbor address-family route-map out"),
  BGP_NEIGHBOR_SELF_REF("bgp neighbor self ref"),
  BGP_NEIGHBOR_UPDATE_SOURCE("bgp neighbor update-source"),
  BGP_NETWORK_ROUTE_MAP("bgp address-family network route-map"),
  BGP_NETWORK6_ROUTE_MAP("bgp address-family [IPv6] network route-map"),
  BGP_NEXTHOP_ROUTE_MAP("bgp address-family nexthop route-map"),
  BGP_REDISTRIBUTE_INSTANCE("bgp address-family redistribute"),
  BGP_REDISTRIBUTE_ROUTE_MAP("bgp address-family redistribute route-map"),
  BGP_SUPPRESS_MAP("bgp address-family suppress-map"),
  BGP_TABLE_MAP("bgp address-family table-map"),
  BGP_UNSUPPRESS_MAP("bgp address-family unsuppress-map"),
  /** This {@link CiscoNxosStructureUsage} should be used for ANY built-in structure of any type. */
  BUILT_IN("built-in structure"),
  CLASS_MAP_CP_MATCH_ACCESS_GROUP("class-map type control-plane match access-group"),
  CLASS_MAP_QOS_MATCH_ACCESS_GROUP("class-map type qos match access-group"),
  CONTROL_PLANE_SERVICE_POLICY("control-plane service-policy"),
  EIGRP_DISTRIBUTE_LIST_PREFIX_LIST_IN("ip distribute-list eigrp prefix-list in"),
  EIGRP_DISTRIBUTE_LIST_PREFIX_LIST_OUT("ip distribute-list eigrp prefix-list out"),
  EIGRP_DISTRIBUTE_LIST_ROUTE_MAP_IN("ip distribute-list eigrp route-map in"),
  EIGRP_DISTRIBUTE_LIST_ROUTE_MAP_OUT("ip distribute-list eigrp route-map out"),
  EIGRP_REDISTRIBUTE_INSTANCE("eigrp address-family redistribute"),
  EIGRP_REDISTRIBUTE_ROUTE_MAP("eigrp address-family redistribute route-map"),
  FLOW_EXPORTER_SOURCE("flow exporter source"),
  FLOW_MONITOR_EXPORTER("flow monitor exporter"),
  FLOW_MONITOR_RECORD("flow monitor record"),
  INTERFACE_CHANNEL_GROUP("interface channel-group"),
  INTERFACE_HSRP_GROUP_TRACK("interface hsrp group track"),
  INTERFACE_IP_ACCESS_GROUP_IN("interface ip access-group in"),
  INTERFACE_IP_ACCESS_GROUP_OUT("interface ip access-group out"),
  INTERFACE_IP_EIGRP("interface ip eigrp"),
  INTERFACE_IP_HELLO_INTERVAL_EIGRP("interface ip hello-interval eigrp"),
  INTERFACE_IP_HOLD_TIME_EIGRP("interface ip hold-time eigrp"),
  INTERFACE_IP_IGMP_ACCESS_GROUP("interface ip igmp access-group"),
  INTERFACE_IP_PIM_JP_POLICY_PREFIX_LIST("interface ip pim jp-policy prefix-list"),
  INTERFACE_IP_PIM_JP_POLICY_ROUTE_MAP("interface ip pim jp-policy"),
  INTERFACE_IP_PIM_NEIGHBOR_POLICY_PREFIX_LIST("interface ip pim neighbor-policy prefix-list"),
  INTERFACE_IP_PIM_NEIGHBOR_POLICY_ROUTE_MAP("interface ip pim neighbor-policy"),
  INTERFACE_IP_POLICY("interface ip policy"),
  INTERFACE_IP_PORT_ACCESS_GROUP("interface ip port access-group"),
  INTERFACE_IP_RIP_ROUTE_FILTER_PREFIX_LIST("interface ip rip route-filter prefix-list"),
  INTERFACE_IP_RIP_ROUTE_FILTER_ROUTE_MAP("interface ip rip route-filter route-map"),
  INTERFACE_IP_ROUTER_EIGRP("interface ip router eigrp"),
  INTERFACE_IP_ROUTER_OSPF("interface ip router ospf"),
  INTERFACE_IP_ROUTER_RIP("interface ip router rip"),
  INTERFACE_IPV6_ROUTER_OSPFV3("interface ipv6 router ospfv3"),
  INTERFACE_SELF_REFERENCE("interface"),
  INTERFACE_SERVICE_POLICY_QOS("interface service-policy type qos"),
  INTERFACE_SERVICE_POLICY_QUEUING("interface service-policy type queuing"),
  INTERFACE_VLAN("interface vlan"),
  INTERFACE_VRF_MEMBER("interface vrf member"),
  IP_ACCESS_LIST_DESTINATION_ADDRGROUP("ip access-list destination addrgroup"),
  IP_ACCESS_LIST_DESTINATION_PORTGROUP("ip access-list destination portgroup"),
  IP_ACCESS_LIST_SOURCE_ADDRGROUP("ip access-list source addrgroup"),
  IP_ACCESS_LIST_SOURCE_PORTGROUP("ip access-list source portgroup"),
  IP_ACCESS_LIST_LINE_SELF_REFERENCE("ip access-list line"),
  IP_PIM_RP_ADDRESS_PREFIX_LIST("ip pim rp-address prefix-list"),
  IP_PIM_RP_ADDRESS_ROUTE_MAP("ip pim rp-address route-map"),
  IP_PIM_RP_CANDIDATE_INTERFACE("ip pim rp-candidate interface"),
  IP_PIM_RP_CANDIDATE_PREFIX_LIST("ip pim rp-candidate prefix-list"),
  IP_PIM_RP_CANDIDATE_ROUTE_MAP("ip pim rp-candidate route-map"),
  IP_ROUTE_NEXT_HOP_INTERFACE("ip route next-hop-interface"),
  IP_ROUTE_NEXT_HOP_VRF("ip route vrf"),
  IP_ROUTE_TRACK("ip route track"),
  IPV6_ROUTE_NEXT_HOP_INTERFACE("ipv6 route next-hop-interface"),
  IPV6_ROUTE_NEXT_HOP_VRF("ipv6 route vrf"),
  IPV6_ROUTE_TRACK("ipv6 route track"),
  LINE_VTY_ACCESS_CLASS_IN("line vty access-class in"),
  LINE_VTY_ACCESS_CLASS_OUT("line vty access-class out"),
  LOGGING_SOURCE_INTERFACE("logging source-interface"),
  MONITOR_SESSION_DESTINATION_INTERFACE("monitor session destination interface"),
  MONITOR_SESSION_SOURCE_INTERFACE("monitor session source interface"),
  MONITOR_SESSION_SOURCE_VLAN("monitor session source vlan"),
  NTP_ACCESS_GROUP_PEER("ntp access-group peer"),
  NTP_ACCESS_GROUP_QUERY_ONLY("ntp access-group query-only"),
  NTP_ACCESS_GROUP_SERVE("ntp access-group serve"),
  NTP_ACCESS_GROUP_SERVE_ONLY("ntp access-group serve-only"),
  NTP_SOURCE_INTERFACE("ntp source-interface"),
  NVE_SELF_REFERENCE("interface nve"),
  NVE_SOURCE_INTERFACE("interface nve source-interface"),
  OSPF_AREA_FILTER_LIST_IN("router ospf area filter-list in"),
  OSPF_AREA_FILTER_LIST_OUT("router ospf area filter-list out"),
  OSPF_AREA_NSSA_ROUTE_MAP("router ospf area nssa route-map"),
  OSPF_DEFAULT_INFORMATION_ROUTE_MAP("router ospf default-information originate route-map"),
  OSPF_REDISTRIBUTE_INSTANCE("router ospf redistribute"),
  OSPF_REDISTRIBUTE_ROUTE_MAP("router ospf redistribute route-map"),
  OSPFV3_AREA_FILTER_LIST_ROUTE_MAP(
      "router ospfv3 address-family area ipv6 unicast filter-list route-map"),
  OSPFV3_DEFAULT_INFORMATION_ORIGINATE_ROUTE_MAP(
      "router ospfv3 address-family default-information originate route-map"),
  OSPFV3_NSSA_DEFAULT_INFORMATION_ORIGINATE_ROUTE_MAP(
      "router ospfv3 area nssa default-information-originate route-map"),
  OSPFV3_REDISTRIBUTE_INSTANCE("router ospfv3 address-family redistribute"),
  OSPFV3_REDISTRIBUTE_ROUTE_MAP("router ospfv3 address-family redistribute route-map"),
  OSPFV3_TABLE_MAP("router ospfv3 address-family table-map"),
  OSPFV3_VRF("router ospfv3 vrf"),
  POLICY_MAP_CLASS("policy-map class"),
  RIP_AF4_DEFAULT_INFORMATION_ROUTE_MAP(
      "router rip address-family ipv4 default-information originate route-map"),
  RIP_AF4_REDISTRIBUTE_INSTANCE("router rip address-family ipv4 redistribute"),
  RIP_AF4_REDISTRIBUTE_ROUTE_MAP("router ospf address-family ipv4 redistribute route-map"),
  RIP_AF6_DEFAULT_INFORMATION_ROUTE_MAP(
      "router rip address-family ipv6 default-information originate route-map"),
  RIP_AF6_REDISTRIBUTE_INSTANCE("router rip address-family ipv6 redistribute"),
  RIP_AF6_REDISTRIBUTE_ROUTE_MAP("router ospf address-family ipv6 redistribute route-map"),
  ROUTE_MAP_CONTINUE("route-map continue"),
  ROUTE_MAP_ENTRY_PREV_REF("route-map entry"),
  ROUTE_MAP_MATCH_AS_PATH("route-map match as-path"),
  ROUTE_MAP_MATCH_COMMUNITY("route-map match community"),
  ROUTE_MAP_MATCH_INTERFACE("route-map match interface"),
  ROUTE_MAP_MATCH_IP_ADDRESS("route-map match ip address"),
  ROUTE_MAP_MATCH_IP_ADDRESS_PREFIX_LIST("route-map match ip address prefix-list"),
  ROUTE_MAP_MATCH_IPV6_ADDRESS("route-map match ipv6 address"),
  ROUTE_MAP_MATCH_IPV6_ADDRESS_PREFIX_LIST("route-map match ipv6 address prefix-list"),
  ROUTE_MAP_SET_COMM_LIST_DELETE("route-map set comm-list delete"),
  ROUTER_EIGRP_SELF_REFERENCE("router eigrp"),
  ROUTER_ISIS_SELF_REFERENCE("router isis"),
  ROUTER_OSPF_SELF_REFERENCE("router ospf"),
  ROUTER_OSPFV3_SELF_REFERENCE("router ospfv3"),
  ROUTER_RIP_SELF_REFERENCE("router rip"),
  ROUTER_RIP_VRF("router rip vrf"),
  SNMP_SERVER_COMMUNITY_USE_ACL("snmp-server community use-acl"),
  SNMP_SERVER_COMMUNITY_USE_IPV4ACL("snmp-server community use-ipv4acl"),
  SNMP_SERVER_COMMUNITY_USE_IPV6ACL("snmp-server community use-ipv6acl"),
  SNMP_SERVER_SOURCE_INTERFACE("snmp-server source-interface"),
  SNMP_SERVER_USER_USE_IPV4ACL("snmp-server user use-ipv4acl"),
  SNMP_SERVER_USER_USE_IPV6ACL("snmp-server user use-ipv6acl"),
  SYSQOS_NETWORK_QOS("system qos service-policy type network-qos"),
  SYSQOS_QOS("system qos service-policy type qos"),
  SYSQOS_QUEUING("system qos service-policy type queuing"),
  TACACS_SOURCE_INTERFACE("ip tacacs source-interface"),
  TRACK_INTERFACE("track interface"),
  TRACK_IP_ROUTE_VRF("track ip route vrf"),
  VLAN_CONFIGURATION_QOS("vlan configuration service-policy type qos");

  private final @Nonnull String _description;

  private CiscoNxosStructureUsage(String description) {
    _description = description;
  }

  @Override
  public @Nonnull String getDescription() {
    return _description;
  }
}
